####################Exercicio_8###########################
####8.1
eutad=read.table("palmadulto.txt",header=TRUE,sep="\t")
head(eutad)
str(eutad)

dist=matrix(NA, ncol=102, nrow=102) #obj para guardar distncias
for(i in 1:101)
    {
        for(j in (i+1):102)
            {
                difx2=(eutad$gx[i]-eutad$gx[j])^2 #calculando as distncias observadas
                dify2=(eutad$gy[i]-eutad$gy[j])^2
                dist[i,j]<-sqrt(difx2 + dify2)
                dist[j,i]<-sqrt(difx2 + dify2)
            }
          
    }
(nn<-apply(dist, 1, min, na.rm=TRUE)) #pegando a menor distncia em cada linha
(mnn<-mean(nn)) #distncia mdia do vizinho mais prximo

##Crie um vetor resultado, com 1000 NA's, para guardar os valores de cada simulao
resultado<-rep(NA,1000)

##Guarde o valor observado na primeira posio de resultado
resultado[1]<-mnn

for(i in 2:1000)   #primeiro ciclo 
    {
        xsim<-round(runif(102,0,320),1) 
        ysim<-round(runif(102,0,320),1)
        dxy<-matrix(NA, ncol=102, nrow=102) #matriz para guardar distncias
        for(j in 1:101)
            {
                for(k in (j+1):102) #ciclos que vo calcular as distncias preenchendo a matriz dxy
                    {
                    difsx2=(xsim[j]-xsim[k])^2
                    difsy2=(ysim[j]-ysim[k])^2
                    dxy[j,k]<-sqrt(difsx2 + difsy2)
                    dxy[k,j]<-sqrt(difsx2 + difsy2)
                    }
          
            }
            resultado[i]<-mean(apply(dxy,1,min,na.rm=TRUE)) 
    }

head(resultado)
str(resultado)

hist(resultado)
abline(v=resultado[1],col="red")

## Calcule a probabilidade 
#teste unicaudal
uni<-sum(resultado<=resultado[1])
uni
p.uni<-uni/length(resultado)
p.uni 

#teste bicaudal
resultado.cent<-resultado-(mean(resultado)) #centralizando a mdia em zero
hist(resultado.cent)
abline(v=resultado.cent[1],col="red")
abline(v=-resultado.cent[1],col="red")
bic<-sum(resultado.cent<=resultado.cent[1]|resultado.cent>=resultado.cent[1]*-1)
p.bic<-bic/length(resultado.cent)
p.bic #probabilidade da distribuio (tanto agregada quanto dispersa) ser aleatria


######8.2

animais=read.table("animais.txt",header=TRUE,sep=";",na.strings = "NA",dec=",",as.is=TRUE)
head(animais)
str(animais)
animais
animais.1<-na.omit(animais) #ocultando os NA
head(animais.1)

##relao log(brain) ~ log(body)
incli<-sum((log(animais.1$body)-(mean(log(animais.1$body))))*(log(animais.1$brain)-(mean(log(animais.1$brain)))))/sum(((log(animais.1$body)-(mean(log(animais.1$body))))^2)) #calculo da inclinao
incli
mod<-lm(log(brain)~log(body),data=animais.1) 
coef(mod) #verificando inclinao

##vetor para guardar o resultado de simulaes;
resultad<-rep(NA,1000)
resultad[1]<-incli

##Desordene o vetor brain e guarde no objeto sim_brain;
##Calcule a inclinao entre o log(sim_brain) ~ log(body) e guarde no vetor resultado;
##Feche o ciclo
for(i in 2:1000)
    {
        sim_brain<-sample(animais.1$brain) #desordenando o vetor brain
        incli1<-sum((log(animais.1$body)-(mean(log(animais.1$body))))*(log(sim_brain)-(mean(log(sim_brain))))
			)/sum(((log(animais.1$body)-(mean(log(animais.1$body))))^2)) #calculando inclinao com o vetor brain desordenado
        resultad[i]<-incli1
    }

##Faa o histograma dos valores simulados e compare com o valor observado da inclinao da relao
hist(resultad) 
abline(v=resultad[1],col="red") 

##Calcule a probabilidade da inclinao observada ter sido gerada por variveis que so independentes
val<-sum(resultad>=resultad[1]|resultad<=resultad[1]*-1) #valores maiores ou iguais a inclinao obervada, e menores ou iguais a inclinao observada negativa
val
prob<-val/length(resultad) #probabilidade da inclinao observada ter sido gerada por variveis independentes
prob